/**
 * Copyright @ 2010-2015 Hex company All rights reserved
 * 系统名称：DCP
 * 模块名称：
 * @version版本信息：V1.0
 * @author:jiewang
 * 
 */
package com.hex.ds.hdrs.common.excel;

import com.hex.bigdata.hbda.utils.StringUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.quartz.CronExpression;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UploadCronTaskExcelHelper {
	/**
	 * 获取EXCEL里面的数值
	 * 
	 * (去首尾空字符串、去除字符串中所有反分号、反单引号、单引号、回车、换行符)
	 * 
	 * @param sheet
	 * @param rowNo
	 * @param cellNo
	 * @return String
	 */
	public static String getValueByRowCeNo(Sheet sheet, int rowNo, int cellNo) {
		String dest = "";
		// 是否为空值
		if (sheet != null) {
//			dest = ExcelHelper.getCellVal(sheet.getRow(rowNo), cellNo).trim();
			dest = replaceBlank(dest);
		}
		return dest;
	}

	/**
	 * 去除字符串中所有分号、反单引号、单引号、回车、换行符
	 *
	 * @param str
	 * @return true:成功 false:失败
	 */
	public static String replaceBlank(String str) {
		String dest = "";
		String regex = ";|`|'|\r|\n";
		// str 是否为 null
		if (str != null) {
			Pattern p = Pattern.compile(regex);
			Matcher m = p.matcher(str);
			dest = m.replaceAll("");
		}
		return dest;
	}

	/**
	 * 去除字符串中所有反单引号
	 *
	 * @param str
	 * @return true:成功 false:失败
	 */
	public static String replaceBlank2(String str) {
		String dest = "";
		String regex = "`";
		// str 是否为 null
		if (str != null) {
			Pattern p = Pattern.compile(regex);
			Matcher m = p.matcher(str);
			dest = m.replaceAll("");
		}
		return dest;
	}


	/**
	 * 获取EXCEL里面的数值
	 * 
	 * (去首尾空字符串)
	 * 
	 * @param sheet
	 * @param rowNo
	 * @param cellNo
	 * @return String
	 */
	public static String getValueByRowCeNo2(Sheet sheet, int rowNo, int cellNo) {
		String dest = "";
		// 是否为空值
		if (sheet != null) {
//			dest = ExcelHelper.getCellVal(sheet.getRow(rowNo), cellNo).trim();
		}
		return dest;
	}

	/**
	 * 获取EXCEL里面的数值
	 * 
	 * (不做任何处理)
	 * 
	 * @param sheet
	 * @param rowNo
	 * @param cellNo
	 * @return String
	 */
	public static String getValueByRowCeNo3(Sheet sheet, int rowNo, int cellNo) {
		String dest = "";
		// 是否为空值
		if (sheet != null) {
//			dest = ExcelHelper.getCellVal(sheet.getRow(rowNo), cellNo);
		}
		return dest;
	}

	/**
	 * 获取任务编号
	 *
	 * @param sheet
	 * @return
	 */
	public static String getTaskCode(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 0);
	}

	public static String checkTaskCode(String taskCode, Integer rowIndex, List<String> taskCodeList){
		if (StringUtils.isBlank(taskCode)) {
			return "第" + rowIndex + "行的任务编码为空,请核对后再上传。";
		}
		if (taskCodeList.contains(taskCode)){
			return "第" + rowIndex + "行的任务编码:" + taskCode + "重复,请核对后再上传。";
		}
		taskCodeList.add(taskCode);
		return "";
	}

	/**
	 * 获取任务名称
	 *
	 * @param sheet
	 * @return
	 */
	public static String getTaskName(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 1);
	}

	public static String checkTaskName(String taskName, Integer rowIndex, List<String> taskNameList){
		if (StringUtils.isBlank(taskName)) {
			return "第" + rowIndex + "行的任务名称为空,请核对后再上传。";
		}
		if (taskNameList.contains(taskName)){
			return "第" + rowIndex + "行的任务名称:" + taskName + "重复,请核对后再上传。";
		}
		taskNameList.add(taskName);
		return "";
	}

	/**
	 * 获取Cron表达式
	 *
	 * @param sheet
	 * @return
	 */
	public static String getCron(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 2);
	}

	public static String checkCron(String cron,Integer rowIndex){
		if (StringUtils.isBlank(cron)){
			return "第" + rowIndex + "行的任务Cron表达式为空,请核对后再上传。";
		}
		if (!CronExpression.isValidExpression(cron)) {
			return "第" + rowIndex + "行的任务Cron表达式:" + cron + "错误,请核对后再上传。";
		}
		return "";
	}

	/**
	 * 获取脚本路径
	 *
	 * @param sheet
	 * @return
	 */
	public static String getShellPah(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 3);
	}

	/**
	 * 获取外部参数
	 *
	 * @param sheet
	 * @return
	 */
	public static String getShellParam(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 4);
	}

	public static String getResNum(Sheet sheet, int rowIndex){
		return getValueByRowCeNo(sheet, rowIndex, 5);
	}

	/**
	 * 获取指定运行节点编号
	 *
	 * @param sheet
	 * @return
	 */
	public static String getAgentCode(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 6);
	}

	/**
	 * 是否限定执行日期
	 *
	 * @param sheet
	 * @return
	 */
	public static String getIsValidDate(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 7);
	}

	/**
	 * 开始日期
	 *
	 * @param sheet
	 * @return
	 */
	public static String getStartDate(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 8);
	}

	/**
	 * 结束日期
	 *
	 * @param sheet
	 * @return
	 */
	public static String getEndDate(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 9);
	}

	/**
	 * 获取计划执行时长
	 *
	 * @param sheet
	 * @return
	 */
	public static String getPlanRunTime(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 10);
	}

	/**
	 * 获取执行超时时长
	 *
	 * @param sheet
	 * @return
	 */
	public static String getTimeOut(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 11);
	}

	/**
	 * 获取任务描述
	 *
	 * @param sheet
	 * @return
	 */
	public static String getTaskDes(Sheet sheet, int rowIndex) {
		return getValueByRowCeNo(sheet, rowIndex, 12);
	}

}
